package com.zs.test;

import com.zs.pojo.Person;

import java.lang.reflect.Modifier;

/**
 * @author ZhouShuang
 * @version 17
 * @Title
 * @date 2025/6/7 上午9:14
 */
public class GetClassInfo {

    public static void main(String [] args){
        Class<?> clz = Person.class; //获取Class实例
        String fullName = clz.getName(); //得到类的完全限定名(包名+类名)
        String simpleName = clz.getSimpleName();//得到类名
        System.out.println(" 以下是 "+fullName+" 类的基本信息 ");
        System.out.println("-----------------------------");

        //获取Person类的所在的包
        Package pkg = clz.getPackage();
        System.out.println(simpleName+" 定义在："+pkg.getName()+" 包中 ");
        System.out.println("------------------------------");

        //获得clz所表示的实体(类，接口，基本类型，void)的超类的Class
        //如果clz表示Object类，一个接口，一个基本类型或void，则返回null
        //如果clz表示一个数组类型，则返回表示该Object类的Class实例
        Class<?> superClass = clz.getSuperclass(); //父类
        System.out.println(simpleName+" 类的超类是 "+superClass.getName());
        System.out.println("-------------------------------");

        //获得clz所表示的类或者接口实现的接口
        //如果clz表示一个不实现任何接口的类或接口，则此方法返回一个长度为0的数组
        //如果此对象表示一个基本类型或void，则此方法返回一个长度为0的数组
        Class<?> [] interfaces = clz.getInterfaces();//实现的接口
        System.out.println(simpleName + "类所实现的接口：");
        for (Class<?> anInterface : interfaces) {
            System.out.println("\t" + anInterface.getName());
        }

        System.out.println("--------------------------------");

        //每一个修饰符对应一个int常量，返回的修饰符信息将类所拥有的修饰符以”或“运算组合
        //通过与Modifier类中的常量进行“与”运算可以即可判断该类型是否拥有某个修饰符
        int modifier = clz.getModifiers(); //获取Person类的实例的访问修饰符
        System.out.println(simpleName + "类的修饰符：");
        if((modifier & Modifier.PUBLIC)==Modifier.PUBLIC){
            System.out.println("\t访问修饰符是：public");
        }else{
            System.out.println("\t访问修饰符是：default(package)");
        }
        if((modifier&Modifier.FINAL)==Modifier.FINAL){
            System.out.println("\t这个类是final的");
        }
        if((modifier&Modifier.ABSTRACT)==Modifier.ABSTRACT){
            System.out.println("这是一个抽象类");
        }
        if((modifier&Modifier.INTERFACE)==Modifier.INTERFACE){
            System.out.println("这是一个接口");
        }
        System.out.println("--------------------------------------------");

    }
}
